<?php

namespace Instagram;
# 2020/4/3 By MaxYeung
# PHP >= 7.2
# version 1.0.0

/**
 * instagram类
 */
class instagram extends Json
{

    // 主域名
    protected $domain = 'https://www.instagram.com';

    public function __construct()
    {
    }

    /**
     * 获取数据
     *
     * @param [type] $insPage
     * @return void
     */
    public function data($insPage = null)
    {
        if (empty($insPage)) {
            return Json::error('请先设置页面');
        }
        $result = [];
        if ($response = @file_get_contents($this->domain . '/' . str_replace($this->domain, '', $insPage) . ((strpos($insPage, '?') !== false) ? '&' : '?') . '__a=1')) {
            if ($response = @json_decode($response, true)) {
                $data = $response['graphql']['shortcode_media']; // 提取主要数据
                $result['owner'] = $data['owner']; // 用户信息
                // 默认只返回一张封面图
                $result['info']['thumb'] = $data['display_url']; // 封面图
                $result['info']['type'] = 'image'; // 默认类型
                if ($data['is_video']) { // 视频类型
                    $result['info']['video_url'] = $data['video_url'];
                    $result['info']['type'] = 'video';
                } else if ($imagesArr = $data['edge_sidecar_to_children']['edges']) { // 多图片
                    foreach ($imagesArr as $k => $v) {
                        $result['info']['images'][$k]['thumb'] = $v['node']['display_url'];
                        if ($v['node']['is_video']) {
                            $result['info']['images'][$k]['video_url'] = $v['node']['video_url'];
                        }
                    }
                    $result['info']['type'] = 'images';
                }
                return Json::success('success', $result);
            }
        }
        return Json::error('无数据');
    }
}

/**
 * json返回类
 */
class Json
{

    /**
     * json格式返回
     *
     * @param string $code
     * @param string $msg
     * @param array $data
     * @return void
     */
    public static function result($code = 0, $msg = null, $data = null)
    {
        return $result = [
            'code' => $code,
            'msg' => $msg,
            'data' => $data
        ];
    }

    /**
     * json成功返回
     *
     * @param [type] $msg
     * @param [type] $data
     * @return void
     */
    public static function success($msg = null, $data = null)
    {
        if (is_array($msg) || is_object($msg)) {
            $data = $msg;
            $msg = '操作成功';
        }
        return self::result(200, $msg, $data);
    }

    /**
     * json错误返回
     *
     * @param [type] $msg
     * @param [type] $data
     * @return void
     */
    public static function error($msg = null, $data = null)
    {
        if (is_array($msg) || is_object($msg)) {
            $data = $msg;
            $msg = '操作失败';
        }
        return self::result(400, $msg, $data);
    }
}
